package com.platform.common.utils;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

import org.springframework.http.HttpStatus;

/**
 * 功能: web.cr6868.com HTTP接口 发送短信 说明:
 * http://web.cr6868.com/asmx/smsservice.aspx?name=登录名&pwd=接口密码&mobile=手机号码&content=内容&sign=签名&stime=发送时间&type=pt&extno=自定义扩展码
 */
public class SmsUtil {
	public static final String TYPE = "pt";

	/**
	 * 创锐平台发送短信
	 *
	 * @param name
	 *            用户名
	 * @param pwd
	 *            密码(md5加密)
	 * @param mobileString
	 *            电话号码字符串，中间用英文逗号间隔
	 * @param contextString
	 *            内容字符串
	 * @param sign
	 *            签名
	 * @param stime
	 *            追加发送时间，可为空，为空为及时发送
	 * @param extno
	 *            扩展码，必须为数字 可为空
	 * @return resultBuffer
	 * @throws Exception
	 */
	public static String crSendSms(String name, String pwd, String mobileString, String contextString, String sign,
			String stime, String extno) throws Exception {
		StringBuilder param = new StringBuilder();
		param.append("name=").append(name);
		param.append("&pwd=").append(pwd);
		param.append("&mobile=").append(mobileString);
		param.append("&content=").append(URLEncoder.encode(contextString, "UTF-8"));
		if (StringUtils.isNotBlank(stime)) {
			param.append("&stime=").append(stime);
		}
		param.append("&sign=").append(URLEncoder.encode(sign, "UTF-8"));
		param.append("&type=" + TYPE);
		if (StringUtils.isNotBlank(extno)) {
			param.append("&extno=").append(extno);
		}

		URL localURL = new URL("http://web.cr6868.com/asmx/smsservice.aspx?");
		URLConnection connection = localURL.openConnection();
		HttpURLConnection httpURLConnection = (HttpURLConnection) connection;

		httpURLConnection.setDoOutput(true);
		httpURLConnection.setRequestMethod("POST");
		httpURLConnection.setRequestProperty("Accept-Charset", "utf-8");
		httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		httpURLConnection.setRequestProperty("Content-Length", String.valueOf(param.length()));

		OutputStream outputStream = null;
		OutputStreamWriter outputStreamWriter = null;
		InputStream inputStream = null;
		String resultBuffer;

		try {
			outputStream = httpURLConnection.getOutputStream();
			outputStreamWriter = new OutputStreamWriter(outputStream);

			outputStreamWriter.write(param.toString());
			outputStreamWriter.flush();

			if (httpURLConnection.getResponseCode() >= HttpStatus.MULTIPLE_CHOICES.value()) {
				throw new Exception(
						"HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
			}

			inputStream = httpURLConnection.getInputStream();
			resultBuffer = convertStreamToString(inputStream);

		} finally {

			if (outputStreamWriter != null) {
				outputStreamWriter.close();
			}

			if (outputStream != null) {
				outputStream.close();
			}

			if (inputStream != null) {
				inputStream.close();
			}

		}

		return resultBuffer;
	}

	/**
	 * 转换返回值类型为UTF-8格式.
	 *
	 * @param is
	 *            InputStream
	 * @return String
	 */
	private static String convertStreamToString(InputStream is) {
		StringBuilder sb1 = new StringBuilder();
		byte[] bytes = new byte[4096];
		int size;

		try {
			while ((size = is.read(bytes)) > 0) {
				String str = new String(bytes, 0, size, StandardCharsets.UTF_8);
				sb1.append(str);
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sb1.toString();
	}
}
